home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / arcers / tar316.zip / DEFINE.H < prev    next >
Text File  |  1994-07-02  |  7KB  |  275 lines

  1. /* define.h - global definitions for Tar program (see file tar.c)
  2.  * Author: Shaporev T.V.
  3.  * Creation date: 14 Dec 1990
  4.  */
  5. #ifdef __ALLOCEXT__
  6. #    define EXT
  7. #    define INI(x) = x
  8. #else
  9. #    define EXT extern
  10. #    define INI(x)
  11. #endif
  12.  
  13. #define ERRARG   1
  14. #define ERINIT   2
  15. #define ERREAD   3
  16. #define EWRITE   4
  17. #define ESMALL   5
  18. #define EINTER   6
  19. #define EXIT     7
  20.  
  21. #define TRUE     1
  22. #define FALSE    0
  23. #define ERROR    (-1)
  24. #define CORRECT  0
  25. #define MAXBLOCK 32
  26. #define BLKSIZE  512
  27. #define MAXTNAME 100
  28. #define QUADISK  '\200'
  29. #define RAINBOW  '\201'
  30. #define dimof(x) (sizeof(x)/sizeof((x)[0]))
  31.  
  32. #ifndef RMKDIR
  33. #    ifdef M_XENIX
  34. #        define RMKDIR
  35. #    endif
  36. #endif
  37. #ifndef RMKDIR
  38. #    ifdef i386
  39. #        define RMKDIR
  40. #    endif
  41. #    ifdef sun
  42. #        define RMKDIR
  43. #    endif
  44. #endif
  45.  
  46. #ifdef MSDOS
  47. #    include <fcntl.h>
  48. #endif
  49. #ifdef __TURBOC__
  50. #       define NO_REALLOC /* stupid runtime can't shrink a block */
  51. #    define write _write
  52. #    define read  _read
  53. #else
  54. #       include <sys/types.h>
  55. #endif
  56. #include <sys/stat.h>
  57. #ifndef S_IREAD
  58. #      define S_IREAD  00400
  59. #    define S_IWRITE 00200
  60. #    define S_IEXEC  00100
  61. #endif
  62. #ifndef S_ISVTX
  63. #    define S_ISUID 04000
  64. #    define S_ISGID 02000
  65. #    define S_ISVTX 01000
  66. #endif
  67. #ifndef O_RDONLY
  68. #    define O_RDONLY 0
  69. #    define O_WRONLY 1
  70. #    define O_RDWR   2
  71. #    define O_BINARY 0
  72. #endif
  73.  
  74. EXT struct stat sa, st;
  75. EXT long longcsum, codesize, allblock, allbytes;
  76. EXT short dmajor, dminor;
  77. EXT int allfiles;
  78. #define isfile ((sa.st_mode & S_IFMT) == S_IFREG)
  79. EXT short ndrive;
  80. #ifdef MSDOS
  81. #    define DEV_FILE 0
  82. #    define DEV_FLOP 1
  83. #    define DEV_QIC2 2
  84.     EXT char devtype INI(DEV_FILE);
  85.     EXT char setdrive INI(FALSE);
  86. #endif
  87.  
  88. #ifdef UNIX
  89.     EXT FILE *myinp;
  90. #else
  91. #    define myinp stdin
  92. #endif
  93. EXT FILE *myout;
  94. EXT int  handle, hwrite;
  95. EXT char a_flag, x_flag, t_flag, c_flag, v_flag, u_flag, y_flag, w_flag,
  96.          i_flag, m_flag, d_flag, j_flag, s_flag, nonest, dslash, o_flag,
  97.          l_flag, cbreak;
  98. #ifdef UNIX
  99.     EXT char p_flag;
  100. #endif
  101.  
  102. #ifdef MSDOS
  103.     EXT char k_flag, deldrv;
  104.     EXT int filemask;
  105.     EXT char *archname INI(NULL);
  106. #endif
  107.  
  108. EXT char pktype;
  109. EXT int pklevel;
  110. #define PKNONE 0
  111. /*#define PKLZH 1*/
  112. #define PKfLZW 2
  113. #define PKpLZW 3
  114. #define PKZIP  4
  115. #define PKDEF  5
  116.  
  117. /* Standard tar file type flags */
  118. #define TF_OLD '\0' /* old-fashion flag - regular file */
  119. #define TF_REG '0'  /* regular file */
  120. #define TF_LNK '1'  /* link */
  121. #define TF_SYM '2'  /* symbolic link */
  122. #define TF_CHR '3'  /* character device */
  123. #define TF_BLK '4'  /* block device */
  124. #define TF_DIR '5'  /* directory */
  125. #define TF_QUE '6'  /* FIFO special */
  126. #define TF_CTG '7'  /* contiguous file */
  127.  
  128. /* GNU extensions */
  129. #define GF_DMP 'D'  /* This is a dir entry that contains
  130.                        the names of files that were in the
  131.                        dir at the time the dump was made */
  132. #define GF_LLN 'K'  /* Identifies the NEXT file on the tape
  133.                        as having a long linkname */
  134. #define GF_LNM 'L'  /* Identifies the NEXT file on the tape
  135.                        as having a long name. */
  136. #define GF_MUL 'M'  /* This is the continuation of a file
  137.                        that began on another volume */
  138. #define GF_NAM 'N'  /* For storing filenames that didn't
  139.                        fit in 100 characters */
  140. #define GF_SPR 'S'  /* This is for sparse files */
  141. #define GF_VOL 'V'  /* This file is a tape/volume header */
  142.  
  143. #define TMAGIC "ustar  "
  144. #define GMAGIC "GNUtar "
  145.  
  146. #define TXT_WORD 8
  147. #define TXT_LONG 12
  148.  
  149. #define THEAD char\
  150.     name[MAXTNAME],\
  151.     mode[TXT_WORD],\
  152.     uid[TXT_WORD],\
  153.     gid[TXT_WORD],\
  154.     size[TXT_LONG],\
  155.     mtime[TXT_LONG],\
  156.     chksum[TXT_WORD],\
  157.     filetype,\
  158.     linkname[MAXTNAME],\
  159.  
  160. typedef union {
  161.    struct {/* main/mine data */
  162.       THEAD
  163.       comment[BLKSIZE-MAXTNAME-8-8-8-12-12-8-1-MAXTNAME-12-12],
  164.       srcsum[TXT_LONG], srclen[TXT_LONG];
  165.    } m;
  166.    struct {/* System V extensions */
  167.       THEAD extent[4], allext[4], total[TXT_LONG];
  168.    } s;
  169.    struct {/* P1003 & GNU extensions */
  170.       THEAD magic[8], uname[32], gname[32],
  171.       devmajor[TXT_WORD], devminor[TXT_WORD],
  172.       /* the following fields are added gnu and NOT standard */
  173.       atime[12], ctime[12], offset[12];
  174.    } x;
  175. } header;
  176.  
  177. struct node {
  178.     struct node *prev, *next;
  179.         union {
  180.         long time;
  181.         struct {
  182.             int inode, device, count;
  183.         } data;
  184.     } info;
  185.         char name[MAXTNAME];
  186. };
  187.  
  188. #define pkfile (pktype == PKDEF || pktype == PKfLZW)
  189. #define PKSIZE (8*BLKSIZE)
  190. EXT int pksize INI(PKSIZE);
  191. EXT char *pk_inp INI(NULL), *pk_out INI(NULL);
  192. EXT char pklock;
  193.  
  194. EXT char *io_buf, *io_2nd;
  195. EXT int cblock;
  196.  
  197. EXT header *hblock;
  198. EXT char *scratch;
  199.  
  200. #define NONE (struct node *)0
  201. EXT struct node *timehead INI(NONE);
  202. #ifdef UNIX
  203.     EXT struct node *linkhead INI(NONE);
  204. #endif
  205.  
  206. #ifndef MSDOS
  207. #    define takename(a,b) (void)strcpy((a),(b))
  208. #endif
  209.  
  210. #define XMAX 16
  211. EXT char *xarg[XMAX];
  212. EXT int xcnt;
  213.  
  214. int   yes_no   __ARGS__(( char ));
  215. #define YES_NO() yes_no('N')
  216.  
  217. void  outmem   __ARGS__(( FILE* ));
  218. char  *salloc  __ARGS__(( int ));
  219. char  *getbuf  __ARGS__(( int ));
  220. void  done     __ARGS__(( int ));
  221. int   initape  __ARGS__(( char* ));
  222. int   pkalloc  __ARGS__(( void ));
  223. int   runtape  __ARGS__(( void ));
  224. int   redirect __ARGS__(( void ));
  225. void  duptape  __ARGS__(( char* ));
  226. void  prmode   __ARGS__(( char, int ));
  227. int   okwork   __ARGS__(( char, char, struct stat *, char* ));
  228. void  cantopen __ARGS__(( char* ));
  229. void  savefile __ARGS__(( char* ));
  230. void  store    __ARGS__(( char* ));
  231. char  prefix   __ARGS__(( void ));
  232. int   usize    __ARGS__(( void ));
  233. short isextent __ARGS__(( short *, long *));
  234. int   ismagic  __ARGS__(( void ));
  235. void  catalog  __ARGS__(( void ));
  236. void  extract  __ARGS__(( void ));
  237. int   restore  __ARGS__(( char*));
  238. void  makelink __ARGS__(( char*, char* ));
  239. void  acctime  __ARGS__(( void ));
  240. void  uplist   __ARGS__(( void ));
  241. int   pktest   __ARGS__(( unsigned char* ));
  242. int   gethead  __ARGS__(( void ));
  243. int   inargs   __ARGS__(( int, char**, char* ));
  244. void  scantape __ARGS__(( int, char**, void(*)() ));
  245. void  backtape __ARGS__(( void ));
  246. void  extwrerr __ARGS__(( void ));
  247. header *readtape  __ARGS__(( void ));
  248. short headsum  __ARGS__(( header * ));
  249. header *steptape  __ARGS__(( void ));
  250. void  writebyte __ARGS__(( int ));
  251. int   writearch __ARGS__(( int, long, char* ));
  252. void  nullblock __ARGS__(( header * ));
  253. void  endtape  __ARGS__(( void ));
  254. int   readbyte __ARGS__(( void ));
  255. void  bacouple __ARGS__(( void ));
  256. int   readarch __ARGS__(( int, long ));
  257. struct node *finditem __ARGS__(( char*, struct node **, struct node * ));
  258. struct node *additem  __ARGS__(( char*, struct node *, struct node ** ));
  259. void  delitem  __ARGS__(( struct node *, struct node ** ));
  260. void  skipfile __ARGS__(( void ));
  261. void  percent  __ARGS__(( long, long ));
  262. #ifdef MSDOS
  263.     int  argdisk  __ARGS__(( int ));
  264.     void inidisk  __ARGS__(( void ));
  265.     int  defdev   __ARGS__(( char* ));
  266.     void logdisk  __ARGS__(( int, char*, int ));
  267.     void takename __ARGS__(( char*, char* ));
  268.  
  269.     int  streamer __ARGS__(( int, void*, int ));
  270.     long ptr2abs  __ARGS__(( void far * ));
  271.     void qend     __ARGS__(( void ));
  272. #endif
  273. int mismatch __ARGS__((char*, char*, int));
  274. int fmatch   __ARGS__((char*, char*));
  275.